熬了一晚上,我从零实现了Transformer模型,把代码讲给你听 您所在的位置:网站首页 动手写一个基础 cache IP 熬了一晚上,我从零实现了Transformer模型,把代码讲给你听

熬了一晚上,我从零实现了Transformer模型,把代码讲给你听

2024-05-29 15:55| 来源: 网络整理| 查看: 265

自从彻底搞懂Self_Attention机制之后,笔者对Transformer模型的理解直接从地下一层上升到大气层,瞬间打通任督二脉。夜夜入睡之前,那句柔情百转的"Attention is all you need"时常在耳畔环绕,情到深处不禁拍床叫好。于是在肾上腺素的驱使下,笔者熬了一个晚上,终于实现了Transformer模型。

对于 Self_Attention 机制一知半解的读者,强烈推荐我的上一篇文章,没有繁复的公式,将 Self_Attention 的本质思想讲给你听。

关于 Transformer的理论讲解,请参考这篇文章。

1. 模型总览

代码讲解之前,首先放出这张经典的模型架构图。下面的内容中,我会将每个模块的实现思路以及笔者在Coding过程中的感悟知无不答。没有代码基础的读者不要慌张,笔者也是最近才入门的,所写Pytorch代码没有花里胡哨,所用变量名词尽量保持与论文一致,对新手十分友好。

我们观察模型的结构图,Transformer模型包含哪些模块?笔者将其分为以下几个部分:

接下来我们首先逐个讲解,最后将其拼接完成模型的复现。

2. config

下面是这个Demo所用的库文件以及一些超参的信息。单独实现一个Config类保存的原因是,方便日后复用。直接将模型部分复制,所用超参保存在新项目的Config类中即可。这里不过多赘述。

import torch import torch.nn as nn import numpy as np import math class Config(object): def __init__(self): self.vocab_size = 6 self.d_model = 20 self.n_heads = 2 assert self.d_model % self.n_heads == 0 dim_k = d_model % n_heads dim_v = d_model % n_heads self.padding_size = 30 self.UNK = 5 self.PAD = 4 self.N = 6 self.p = 0.1 config = Config()3. Embedding

Embedding部分接受原始的文本输入(batch_size*seq_len,例:[[1,3,10,5],[3,4,5],[5,3,1,1]]),叠加一个普通的Embedding层以及一个Positional Embedding层,输出最后结果。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有